perm filename FOO.PUB[LSP,JRA]1 blob sn#101897 filedate 1974-05-13 generic text, type T, neo UTF8
TSL is even simpler, being a straight SDIO problem:

.begin group
INPUT
prefix	::= var%4I%*
	::= f_args%4I%*

f_args%4I%*	::= struct[fn%4I%*:id;args%4I%*:terms%4I%*]

terms%4I%*	::= seq[prefix]

.end
.begin group

OUTPUT
postfix	::= var%4O%*
	::= f_args%4O%*

f_args%4O%*	::= struct[args%4O%*:terms%4O%*;fn%4O%*:id]

terms%4O%*	::= seq[postfix]
.END
.BEGIN GROUP


TRANSFORMATION
var%4O%* = var%4I%*
fn%4O%* = fn%4I%*
args%4O%* = args%4I%*

.END
.BEGIN GROUP;NOFILL;

PROGRAM FOR TRANSFORMATION

pre_to_post[e;prefix]postfix
 generic(e)
	[var%4I%*] =>e
	[f_args%4I%*(u,v)] => f_args%4O%*(arg_list(v),u)
 end;

arg_list(a:terms%4I%*)terms%4O%*
 on(a;*,pre_to_post;ε,terms%4O%*)


.END



INFIX TO POSTFIX TRANSLATOR WITH USUSAL PRECEDENCE
.BEGIN NOFILL

.BEGIN GROUP

	INPUT

exp	::= exp + term
	::= term

term	::= term * fact
	::= fact

fact	::= var
	::= const
	::= (exp)

.END

.begin group

	ABSTRACT SYNTAX

exp	::= sum
	::= term

term	::= prod
	::= fact

fact	::= var
	::= const
	::= paren

sum	::= struct[add1:exp;add2:term]

prod	::= struct[pr1:term;pr2:fact]

paren	::= struct[exp]
.END

.BEGIN GROUP

	OUTPUT

post	::= var
	::= const
	::= post post *
	::= post post +

.END

.BEGIN GROUP
	ABSTRACT SYNTAX

post	::= var
	::= const
	::= postprod
	::= postsum

postsum	::= struct[ar1:post;ar2:post]
postprod::= struct[ar1:post;ar2:post]

.END

.BEGIN GROUP

	TRANSFORMATION : T

var	=> var
const	=> const
sum	=> postsum
prod	=> postprod

.END

problem for APG: write T such that T(exp) = post

.BEGIN GROUP

	THE PROGRAM

inf_to_post(e:exp)post
 generic(e)
	sum(u,v) => postsum(inf_to_post(u),trans_term(v))
	term     => trans_term(e)
 end

trans_term(u:term)post
 generic(u)
	prod(x,y) => postprod(trans_term(x),trans_fact(y))
	fact      => trans_fact(u)
 end

trans_fact(x:fact)post
 generic(x)
	var => x
	const => x
	paren(u) => inf_to_post(u)
 end

.END
.END